package org.csu.jpetstore.bo;

import lombok.Data;
import org.csu.jpetstore.vo.CartItemVO;
import org.csu.jpetstore.vo.CartVO;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

@Data
public class CartBO {
    private String username;
    private List<CartItemBO> cartItemBOList;

    private CartBO(String username, List<CartItemBO> cartItemBOList) {
        this.username = username;
        this.cartItemBOList = cartItemBOList;
    }

    public static CartBO toCartBO(String username, List<CartItemBO> cartItemBOList) {
        if (username == null || cartItemBOList == null)
            return null;
        return new CartBO(username, cartItemBOList);
    }

    public static CartVO toCartVO(CartBO cartBO) {
        List<CartItemVO> cartItemVOList = new ArrayList<>();
        double cartTotal = 0;
        for (CartItemBO cartItemBO : cartBO.getCartItemBOList()) {
            CartItemVO cartItemVO = new CartItemVO();

            cartItemVO.setItemId(cartItemBO.getItemBO().getItemId());
            cartItemVO.setProductId(cartItemBO.getItemBO().getProductId());
            cartItemVO.setDescription(cartItemBO.getItemBO().getAttribute());
            cartItemVO.setPrice(cartItemBO.getItemBO().getListPrice());
            cartItemVO.setInStock(cartItemBO.getInStock());
            cartItemVO.setQuantity(cartItemBO.getQuantity());
            double lineTotal;
            lineTotal = cartItemBO.getQuantity() * cartItemBO.getItemBO().getListPrice().doubleValue();
            cartItemVO.setLineTotal(new BigDecimal(lineTotal));
            cartTotal += cartItemVO.getQuantity() * cartItemVO.getPrice().doubleValue();
            cartItemVOList.add(cartItemVO);
        }

        CartVO cartVO = new CartVO();
        cartVO.setCartItemVOList(cartItemVOList);
        cartVO.setTotal(new BigDecimal(cartTotal));
        return cartVO;
    }
}
